home *** CD-ROM | disk | FTP | other *** search
/ Plug-In Power Pack for Netscape Communicator / Plug-In Power Pack for Netscape Communicator.iso / plugins / dataviews / dvtools / demos / telecomdemo / status.c < prev    next >
C/C++ Source or Header  |  1997-05-08  |  11KB  |  370 lines

  1. #ifndef lint
  2. static char SccsId[]= "@(#)status.c    V1.10    3/17/95";
  3. #endif
  4.  
  5.  
  6. /*
  7.  |    File name: status.c
  8.  |========================================================================
  9.  |
  10.  |    Copyright (c) 1990 -- V.I. Corporation
  11.  |
  12.  |========================================================================
  13.  */
  14.  
  15. #include "simulate.h"
  16. #include "tlc_fundecl.h"
  17.  
  18. /*
  19.  *   Define the normal input mask for this screen.
  20.  */
  21. #define NORMAL_MASK  ( (ULONG) V_BUTTONPRESS | V_BUTTONRELEASE | V_KEYPRESS | \
  22.                                V_WINDOW_QUIT | V_EXPOSE | V_RESIZE )
  23.  
  24. #define DEF_COLORTABLE    (ADDRESS)NULL
  25.  
  26. /***************** Begin Function Declarations *************/
  27. LOCAL  void ResizeStatusScreen V_P_((void));
  28. LOCAL  void PickInTopLevelDrawport V_P_((OBJECT location));
  29. LOCAL  BOOLPARAM ValidNodeName V_P_((char *name, NODE_STRUCT **node_struct, VIEW_STRUCT **view_struct));
  30. LOCAL  void HandleSubDrawportInput V_P_((OBJECT location));
  31. LOCAL  BOOLPARAM ValidPartName V_P_((char *name, PART_STRUCT **part_struct, char **part_type));
  32. /***************** End Function Declarations *************/
  33.  
  34. /*
  35.  *   CreateStatusScreen -- create the status screen and setup the event mask.
  36.  */
  37. void 
  38. CreateStatusScreen (devname)
  39.      char *devname;
  40. {
  41.  
  42.   int error_code;
  43.   char buf[50];
  44.  
  45.   StatusScreen = TscOpenSet (devname, DEF_COLORTABLE,
  46. #ifdef WINNT
  47.                  V_WIN32_ICON_NAME,       "teleicon",
  48.                  V_WINDOW_HEIGHT,        414,
  49.                  V_WINDOW_WIDTH,          552,
  50.                  V_WINDOW_X,              240,
  51.                  V_WINDOW_Y,              0,
  52. #ifdef DOUBLE_BUFFER
  53.                  V_WIN32_DOUBLE_BUFFER,   YES,
  54. #endif /* DOUBLE_BUFFER */
  55. #else  /* Not WINNT */
  56.                  V_WINDOW_HEIGHT,        650,
  57.                  V_WINDOW_WIDTH,          650,
  58.                  V_WINDOW_X,              450,
  59.                  V_WINDOW_Y,              0,
  60.                  V_X_EXPOSURE_BLOCK,      YES,
  61. #endif /* WINNT */
  62.                  V_WINDOW_NAME,           "Network Status",
  63.                  V_INITIAL_CURSOR,
  64.                  V_END_OF_LIST );
  65.  
  66.   if(!StatusScreen)
  67.  {
  68.    error_code=TscOpenError();
  69. #ifdef WINNT
  70.    sprintf(buf,"Product is not validated. Error code %d.",error_code);
  71.    MessageBox(NULL,buf,"Validation Error",MB_OK);
  72. #else
  73.    fprintf(stderr,"Product is not validated. Error code %d.",error_code);
  74. #endif
  75.    exit(error_code);
  76.   }
  77.  
  78.   (VOID) VOscWinEventMask ((ULONG) NORMAL_MASK, 0L);
  79. }
  80.  
  81.  
  82. /*
  83.  *   LoadAuxStatusViews -- load the other subdrawport views.
  84.  */
  85. void LoadAuxStatusViews 
  86. V_P_ ((void))
  87. {
  88.   LoadDialogView (DialogViewName);
  89.   LoadFixboxView (FixboxViewName);
  90.   LoadSmallmapView (SmallmapViewName);
  91. }
  92.  
  93.  
  94. /*
  95.  *   DestroyStatusScreen -- called at program termination.  Destroy all
  96.  *     drawports associated with this screen, then close the window.
  97.  */
  98. void DestroyStatusScreen 
  99. V_P_ ((void))
  100. {
  101.   (VOID) TscSetCurrentScreen (StatusScreen);
  102.   (VOID) TdpDestroy (Dialog.disp_info.drawport);
  103.   (VOID) TdpDestroy (Fixbox.disp_info.drawport);
  104.   (VOID) TdpDestroy (Smallmap.disp_info.drawport);
  105.   DestroyStatusDrawports ();
  106.   (VOID) TscClose (StatusScreen);
  107. }
  108.  
  109.  
  110. /*
  111.  *   UpdateStatusScreen -- update the dynamic components of the main status
  112.  *     view and also of the subviews that are visible.
  113.  */
  114. void UpdateStatusScreen 
  115. V_P_ ((void))
  116. {
  117.   (VOID) TdpDrawNext (SimParams.curr_view->drawport);
  118.   if (Dialog.disp_info.drawn)
  119.     UpdateDialogDrawport ();
  120.   if (Smallmap.disp_info.drawn)
  121.     (VOID) TdpDrawNext (Smallmap.disp_info.drawport);
  122. }
  123.  
  124.  
  125. /*
  126.  *   HandleStatusInput -- deal with input to the status window.  Deal with
  127.  *     window events and picks in the main drawport here.  If the input is
  128.  *     in one of the subviews, call the correct input handling routine for
  129.  *     that drawport.
  130.  */
  131. void 
  132. HandleStatusInput (location)
  133.      OBJECT location;
  134. {
  135.   DRAWPORT drawport;
  136.   INT button_num;
  137.  
  138.   switch (VOloType (location))
  139.     {
  140.       /*
  141.        *   Deal with window system events.
  142.        */
  143.     case V_EXPOSE:
  144.       ExposeViews (location);
  145.       break;
  146.     case V_RESIZE:
  147.       ResizeStatusScreen ();
  148.       break;
  149.     case V_WINDOW_QUIT:
  150.       *Control.quit_flag = 1;
  151.       break;
  152.       /*
  153.        *   We're only interested in keypresses if they're going into
  154.        *     the fixbox subview.
  155.        */
  156.     case V_KEYPRESS:
  157.       if (TloGetSelectedDrawport (location) == Fixbox.disp_info.drawport)
  158.         InputInFixboxDrawport (location);
  159.       break;
  160.     case V_BUTTONPRESS:
  161.       button_num = VOloButton (location);
  162.       drawport = TloGetSelectedDrawport (location);
  163.       /*
  164.        *   If it's a first button, then determine which drawport the
  165.        *     pick happened in and call the correct routine.
  166.        */
  167.       if (button_num == 1)
  168.         {
  169.           if (drawport == SimParams.top_view->drawport)
  170.             PickInTopLevelDrawport (location);
  171.           else if (drawport == Dialog.disp_info.drawport)
  172.             PickInDialogDrawport (location);
  173.           else if (drawport == Fixbox.disp_info.drawport)
  174.             InputInFixboxDrawport (location);
  175.           else if (drawport == Smallmap.disp_info.drawport)
  176.             InputInSmallmapDrawport (location);
  177.           else
  178.             HandleSubDrawportInput (location);
  179.         }
  180.       /*
  181.        *   If it's a second or third button and the drawport is one of the
  182.        *     subviews, we're moving that subview to a new screen location.
  183.        *     Call the correct drawport moving routine.
  184.        */
  185.       else if (button_num == 2 || button_num == 3)
  186.         if (drawport == Dialog.disp_info.drawport)
  187.           {
  188.             MoveDialogDrawport (location);
  189.             (VOID) VOscWinEventMask ((ULONG) NORMAL_MASK, 0L);
  190.           }
  191.         else if (drawport == Fixbox.disp_info.drawport)
  192.           {
  193.             MoveFixboxDrawport (location);
  194.             (VOID) VOscWinEventMask ((ULONG) NORMAL_MASK, 0L);
  195.           }
  196.         else if (drawport == Smallmap.disp_info.drawport)
  197.           {
  198.             MoveSmallmapDrawport (location);
  199.             (VOID) VOscWinEventMask ((ULONG) NORMAL_MASK, 0L);
  200.           }
  201.       break;
  202.     case V_BUTTONRELEASE:
  203.       (VOID) VUerHandleLocEvent (location);
  204.       break;
  205.     default:
  206.       break;
  207.     }
  208. }
  209.  
  210.  
  211. /*
  212.  *   ResizeStatusScreen -- handle a resize window event.
  213.  *     Reset the screen and recreate the
  214.  *     subview's drawports at the correct position based on their
  215.  *     virtual coordinates.
  216.  */
  217. LOCAL void ResizeStatusScreen 
  218. V_P_ ((void))
  219. {
  220.   (VOID) TscReset (StatusScreen);
  221.   RecreateDrawport (&Dialog.disp_info);
  222.   RecreateDrawport (&Smallmap.disp_info);
  223.   RecreateDrawport (&Fixbox.disp_info);
  224. }
  225.  
  226.  
  227. /*
  228.  *   PickInTopLevelDrawport -- handle a pick in the top level drawport.  If
  229.  *     the selected object's name corresponds to a network node we have
  230.  *     knowledge of, bring up the dialog subview with that node's information.
  231.  */
  232. LOCAL void 
  233. PickInTopLevelDrawport (location)
  234.      OBJECT location;
  235. {
  236.   CHAR *name;
  237.   NODE_STRUCT *node_struct;
  238.   VIEW_STRUCT *view_struct;
  239.  
  240.   if ((name = TloGetSelectedObjectName (location)))
  241.     if (ValidNodeName (name, &node_struct, &view_struct))
  242.       {
  243.         SetupDialogBox (node_struct, view_struct);
  244.         DrawSubView (&Dialog.disp_info);
  245.       }
  246.     else if (strcmp (name, "Quit") == 0)
  247.       {
  248.         *Control.quit_flag = 1;
  249.         (VOID) VUerHandleLocEvent (location);
  250.       }
  251. }
  252.  
  253.  
  254. /*
  255.  *   ValidNodeName -- see if an object's name is a correct description of a
  256.  *     known node.  Get the node name part and look in the symbol table for it.
  257.  *     If there's a view name attached, see if we know about that view and
  258.  *     return the infomation.
  259.  */
  260. LOCAL BOOLPARAM 
  261. ValidNodeName (name, node_struct, view_struct)
  262.      char *name;
  263.      NODE_STRUCT **node_struct;
  264.      VIEW_STRUCT **view_struct;
  265. {
  266.   CHAR *ptr, *next_tok, *node_name, *view_name;
  267.  
  268.   ptr = StrClone (name);
  269.   get_token (ptr, &ptr, &next_tok);
  270.   if (next_tok == NULL)
  271.     return NO;
  272.   get_token (next_tok, &node_name, &next_tok);
  273.   if ((*node_struct = GetNamedNode (node_name)))
  274.     {
  275.       if (next_tok != NULL)
  276.         {
  277.           get_token (next_tok, &view_name, &next_tok);
  278.           *view_struct = GetNamedView (view_name);
  279.           if (*view_struct)
  280.             return YES;
  281.         }
  282.       else
  283.         *view_struct = NULL;
  284.     }
  285.   return NO;
  286. }
  287.  
  288.  
  289. /*
  290.  *   HandleSubDrawportInput -- handle input in one of the non-top level main
  291.  *     drawports.  If the selected object is a part or switch, bring up the
  292.  *     fixbox for the user to look at.  If it's name is Smallmap then draw the
  293.  *     smallmap subview if it's not already drawn.  If the name indicates
  294.  *     another main drawport, draw that new main view.
  295.  */
  296. LOCAL void 
  297. HandleSubDrawportInput (location)
  298.      OBJECT location;
  299. {
  300.   CHAR *name, *cptr;
  301.   VIEW_STRUCT *view_struct;
  302.   PART_STRUCT *part_struct;
  303.   CHAR *part_type;
  304.  
  305.   (VOID) VUerHandleLocEvent (location);
  306.   if ((name = TloGetSelectedObjectName (location)))
  307.     if (strncmp (name, "part", 4) == 0 || strncmp (name, "switch", 5) == 0)
  308.       {
  309.         if (ValidPartName (name, &part_struct, &part_type))
  310.           {
  311.             SetupFixbox (part_struct, part_type);
  312.             DrawSubView (&Fixbox.disp_info);
  313.           }
  314.       }
  315.     else if (strcmp (name, "Quit") == 0)
  316.       {
  317.         *Control.quit_flag = 1;
  318.       }
  319.     else if (strcmp (name, "Smallmap") == 0)
  320.       {
  321.         if (Smallmap.disp_info.drawn == NO)
  322.           DrawSubView (&Smallmap.disp_info);
  323.         else
  324.           EraseSubView (&Smallmap.disp_info, NULL);
  325.       }
  326.     else if ((cptr = S_STR_RINDEX (name, '*')))
  327.       if ((view_struct = GetNamedView (cptr + 1)))
  328.         NewMainView (SimParams.curr_view, view_struct);
  329. }
  330.  
  331.  
  332. /*
  333.  *   ValidPartName -- check an object's name to see if it's a part (or
  334.  *     switch) that we know about.  If so, then return the information.
  335.  */
  336. LOCAL BOOLPARAM 
  337. ValidPartName (name, part_struct, part_type)
  338.      char *name;
  339.      PART_STRUCT **part_struct;
  340.      char **part_type;
  341. {
  342.   CHAR *ptr, *next_tok, *type, *part_name, *view_name;
  343.   CHAR tmp_str[30];
  344.  
  345.   ptr = StrClone (name);
  346.   get_token (ptr, &type, &next_tok);
  347.   if (next_tok == NULL)
  348.     return NO;
  349.   get_token (next_tok, &part_name, &next_tok);
  350.   if (strcmp (type, "part") == 0)
  351.     {
  352.       view_name = SimParams.curr_view->view_name;
  353.       (VOID) sprintf (tmp_str, "%s*%s", view_name, part_name);
  354.     }
  355.   else if (strcmp (type, "switch") == 0)
  356.     (VOID) sprintf (tmp_str, "switch*%s", part_name);
  357.   else
  358.     return NO;
  359.   if ((*part_struct = GetNamedPart (tmp_str)))
  360.     if ((*part_struct)->status != NORMAL)
  361.       {
  362.         if (strcmp (type, "part") == 0)
  363.           *part_type = part_name;
  364.         else
  365.           *part_type = type;
  366.         return YES;
  367.       }
  368.   return NO;
  369. }
  370.